package com.auto.survey.activity.monitoring.entity

import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.Index
import androidx.room.PrimaryKey
import com.auto.survey.util.Helper

/**
 * 观测数据实体类，对应数据库中的MonitoringObservation表
 * 记录从测站到测点的单次观测数据
 */
@Entity(
    tableName = "MonitoringObservation",
    foreignKeys = [
        ForeignKey(
            entity = MonitoringPoint::class,
            parentColumns = ["id"],
            childColumns = ["pointId"],
            onDelete = ForeignKey.CASCADE
        )
    ],
    indices = [Index(value = ["pointId"])]
)
data class MonitoringObservation(
    /**
     * 观测数据ID，主键，自增长
     */
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    /**
     * 测点ID，外键关联ATS_POINT表
     */
    var pointId: Int=-1,
    /**
     * 观测时间，格式：YYYY-MM-DD HH:MM:SS
     */
    var observationTime: String = Helper.formatTimestamp(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"),
    /**
     * 水平角观测值（弧度）
     */
    var horizontalAngle: Double,
    /**
     * 垂直角观测值（弧度）
     */
    var verticalAngle: Double,
    /**
     * 斜距观测值（米）
     */
    var distance: Double,
    /**
     * 观测时的温度（摄氏度）
     */
    var temperature: Double,
    /**
     * 观测时的气压（hPa）
     */
    var pressure: Double,
    /**
     * 观测时的湿度（%）
     */
    var humidity: Double,
    /**
     * 平差后的X坐标
     */
    var correctedX: Double,
    /**
     * 平差后的Y坐标
     */
    var correctedY: Double,
    /**
     * 平差后的Z坐标（高程）
     */
    var correctedZ: Double,
    /**
     * 相对于首次观测的X方向位移量（米）
     */
    var dx: Double,
    /**
     * 相对于首次观测的Y方向位移量（米）
     */
    var dy: Double,
    /**
     * 相对于首次观测的Z方向位移量（米）
     */
    var dz: Double,
    /**
     * 总位移量（米）
     */
    var totalDisplacement: Double,
    /**
     * 创建时间，格式：YYYY-MM-DD HH:MM:SS
     */
    var createTime: String= Helper.formatTimestamp(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"),
    /**
     * 更新时间，格式：YYYY-MM-DD HH:MM:SS
     */
    var updateTime: String= Helper.formatTimestamp(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"),
    /**
     * 关联的平差结果ID，可为空
     */
    var adjustmentId: Int? = null
)